15-3 顗漱k

常用在多項式的操作包含求值、求根、微分、積分等,這些操作我們都可以看成是多項式物件的方法(Methods),每一個方法都對應到 @polynom 目錄下的一個函式。而且這些函式只能應用於我們所定義的多項式物件。

一個最簡單的方法,就是要取用多項式物件的係數,可以靠下列函式來完成:

Example 1: 15-物件導向程式設計/@polynom/polyCoef.mfunction c = polyCoef(p) % POLYNOM/POLYCOEF Convert polynom object to coefficient vector. c = p.c;

經由此函式(或方法),外部世界才能取得一個多項式物件的係數。

若要計算多項式的值,我們可以採用下列函式:

Example 2: 15-物件導向程式設計/@polynom/polyval.mfunction y = polyval(p, x) % POLYNOM/POLYVAL POLYVAL(p, x) evaluates p at the points x. y = polyval(p.c, x);

在上述函式中,我們直接呼叫 MATLAB 原有的函式 polyval 來計算多項式的值,雖然函式名稱一樣,但 MATLAB 能夠根據資料型態的不同來呼叫不同的函式,這也是屬於函式重載功能的體現。欲測試此方法,請見下例範例:

Example 3: 15-物件導向程式設計/polyval01.mp = polynom([1 2 3]); x = polyval(p, 1) y = polyval(p, [1 2 3 4])x = 6 y = 6 11 18 27

Hint
在上述範例中,MATLAB 採用 y = polyval(p, [1 2 3 4]) 的方式來呼叫多項式物件 p 的方法polyval,但在一般支援OOP的程式語言(如 C++ 或 JavaScript)中,對應的呼叫方式應該是 y = p.polyval([1 2 3 4]),僅供參考比較。

利用類似的方式,我們也可以求取多項式的根(roots.m)、微分(polyder.m)、積分(polyint.m),這些函式都已經置放於 @polynom 目錄之下,讀者可以自行進行相關測試及實驗。

另一個常用的功能,就是對多項式畫圖,這可由下列的 plot.m 函式來達成:

Example 4: 15-物件導向程式設計/@polynom/plot.mfunction plot(p, range) % POLYNOM/PLOT PLOT(p) plots the polynom p. if nargin<2 range = max(abs(roots(p)))*[-1 1]; end x = linspace(range(1), range(2)); y = polyval(p, x); plot(x, y); title(polyAsString(p)) grid on

在上述函式中,range 是描點作圖的範圍,若不給定,此函式也會自動決定一個範圍來進行作圖。以下範例可用來測試此 plot 函式:

Example 5: 15-物件導向程式設計/polyPlot01.mp = polynom([1 -4 -1 4]); range = [-1.2, 4.2]; subplot(3,1,1); plot(p, range); p2 = polyder(p); subplot(3,1,2); plot(p2, range); p3 = polyder(p2); subplot(3,1,3); plot(p3, range);

在上述範例中,第一個圖是多項式 在 [-1.2, 4.2] 區間的曲線圖,第二、三個圖分別是 的一次和二次導函數的圖。

如果你要顯示一個類別的所有方法,可以使用 methods 指令,例如如果你在 MATLAB 命令視窗輸入「methods polynom」,就可以看到由 polynom 類型所擁有的各種方法。


MATLAB程式設計:進階篇